1. 함수 옮기기
함수를 한 곳에서 다른 곳으로 이동
다음 여러 가지 형태를 보일 수 있음
- inner 함수를 최상위로 이동
- A 클래스의 메서드를 B 클래스로 이동
- A 모듈의 함수를 B 모듈로 이동
- 기타
- 함수가 자신이 속한 모듈의 요소들보다 다른 모듈의 요소들을 더 많이 참조할 때
- 다른 함수 안에서 도우미 역할로 정의된 함수 중 독립적인 가치가 있는 함수가 있을 때
절차
- 선택한 함수가 현재 컨텍스트에서 사용 중인 모든 프로그램 요소를 살펴본다. 이 요소들 중에도 함께 옮겨야 할 게 있는지 고민해본다.
- 선택한 함수가 다형 메서드인지 확인한다.
- 선택한 함수를 타깃 컨텍스트로 복사한다. 타깃 함수가 새로운 터전에 잘 자리 잡도록 다듬는다.
- 정적 분석을 수행한다.
- 소스 컨텍스트에서 타깃 함수를 참조할 방법을 찾아 반영한다.
- 소스 함수를 타깃 함수의 위임 함수가 되도록 수정한다.
- 테스트한다.
- 소스 함수를 인라인(6.2)할지 고민해본다.
예시 코드
😞 Before
class Account {
get overdraftCharge() {
// ...
}
}
😃 After
class Account {
get overdraftCharge() {
return this.type.overdraftCharge()
}
}
class AccountType {
get overdraftCharge() {
// ...
}
}